package top.itbook.shop;

import top.itbook.Main;
import top.itbook.shop.impl.Commodity;

import java.util.ArrayList;

/**
 * 系统商城武器抽象类 实现商城商品接口
 */
public abstract class Arms implements Commodity {
    // 静态类成员
    final private static ArrayList<Arms> armsShop = Main.armsShop; // 系统武器商城集合地址
    private String name;    // 武器名
    private int attack;  // 攻击力
    private int money;   // 价格
    private String info;    // 介绍
    private boolean state;  // 状态 - 上架则是true，不上架则是false 默认则是false

    // 无参构造器
    public Arms(){
        this.name = "请设置商品名称.";
        this.state = false;
        this.info = "暂无介绍。";
    }

    /**
     * 有参构造器
     * <p>当使用此构造器时系统会自动的为info设置初始为"暂无介绍"
     * @param name 武器名
     * @param attack 武器攻击力
     * @param money 武器价格
     */
    public Arms(String name,int attack,int money){
        this.name = name;
        this.attack = attack;
        this.money = money;
        this.info = "暂无介绍。";
        this.state = false;
    }

    /**
     * 有参构造器
     * @param name 武器名
     * @param attack 武器攻击力
     * @param money 武器价格
     * @param info 武器介绍
     */
    public Arms(String name,int attack,int money,String info){
        this.name = name;
        this.attack = attack;
        this.money = money;
        this.info = info;
        this.state = false;
    }

    /**
     * 有参构造器
     * @param name 武器名
     * @param attack 武器攻击力
     * @param money 武器价格
     * @param info 武器介绍
     * @param state 是否上架 - false为下架
     */
    public Arms(String name,int attack,int money,String info,boolean state){
        this.name = name;
        this.attack = attack;
        this.money = money;
        this.info = info;
        this.state = state;
    }

    public String getName(){
        return name;
    }

    public int getAttack(){
        return attack;
    }

    public int getMoney(){
        return money;
    }

    public String getInfo(){
        return info;
    }

    public boolean getState(){
        return state;
    }

    public void setName(String name){
        this.name = name;
    }

    public void setAttack(int attack){
        this.attack = attack;
    }

    public void setMoney(int money){
        this.money = money;
    }

    public void setInfo(String info){
        this.info = info;
    }

    public void setState(boolean state){
        this.state = state;
    }

    /**
     * 将商品添加进系统商城中
     * @return 是否成功添加
     */
    @Override
    public boolean addCommodity(){
        return armsShop.add(this);
    }

    /**
     * 根据传入的对象去查找对应集合中的商品元素并删除
     * @param commodity 要删除的商品对象
     * @return 是否成功删除。成功则返回true
     */
    @Override
    public boolean delCommodity(Commodity commodity){
        // 非空校验
        if (commodity == null){
            return false;
        }
        if (commodity instanceof Arms){
            // 传入的类型为武器类型
            for (Arms arms : armsShop) {
                if (arms == commodity){
                    return armsShop.remove(commodity); // 这里循环遍历是为了防止此商品变量并未放进集合中
                }
            }
            return false; // 并未找到对应的武器
        }else{
            return false; // 传入的类型并非武器类型
        }
    }

    /**
     * 根据传入的武器名删除对应武器商店中的商品
     * @param name 要删除的武器名
     * @return 是否成功删除，成功则返回true
     */
    @Override
    public boolean delCommodity(String name){
        for (Arms arms : armsShop) {
            if (arms.getName().equals(name)){
                // 找到了对应名字的商品
                return armsShop.remove(arms);
            }
        }
        return false; // 没有找到对应名字的商品
    }

    @Override
    public String toString() {
        return "Arms{" +
                "name='" + name + '\'' +
                ", attack=" + attack +
                ", money=" + money +
                ", info='" + info + '\'' +
                ", state=" + state +
                '}';
    }
}
